home *** CD-ROM | disk | FTP | other *** search
/ CD Exchange / CD Exchange - Volume 1.iso / graphics / utils / videotracker / develop / source / crunch.s < prev    next >
Text File  |  1980-01-02  |  7KB  |  422 lines

  1.  
  2.     opt    a+
  3.     opt    o+
  4.     opt    ow-
  5.  
  6.     section    1,code_c
  7.     
  8.     move.l    #raw,a0
  9.     move.l    #cru,a1    
  10.     move.l    #raw.e-raw,d0
  11.     bsr    crunch
  12.     move.l    d0,d1
  13.     move.l    #cru,d0
  14.     add.l    d0,d1
  15.     illegal    
  16.  
  17. ;    ;crunch routine
  18. ;    ;
  19. ;    ;a0 = pointer to uncrunched data
  20. ;    ;a1 = pointer to crunched data
  21. ;    ;d0 = length uncrunched data
  22. ;    ;
  23. ;    ;d0 returns  crunched data length
  24. ;
  25.  
  26.  
  27. offset =    $800
  28.  
  29. crunch
  30. Scrunch:
  31.     movem.l    d1-d7/a0-a6,-(sp)
  32.     move.l    a1,a2
  33.     move.l    a0,a1
  34.     add.l    d0,a1
  35.  
  36.     movem.l    a0-a2,-(sp)
  37.  
  38.     move.l    #'PVC!',(a2)+    ;set ascii info
  39.     move.l    d0,(a2)+        ;raw length
  40.     add.l    #4,a2        ;crunch length
  41.  
  42. ;    lea    start,a0    
  43. ;    lea    stop,a1    
  44. ;    lea    write,a2    
  45.  
  46.     moveq    #1,d2    
  47.     clr.w    d1    
  48.     clr.l    d7    
  49.  
  50. noteocrunch:
  51.     bsr.S    blkcrunch    
  52.     tst.b    d0
  53.     beq.S    crunched
  54.     addq.w    #1,d1
  55.     cmpi.w    #264,d1
  56.     bne.S    nojmp
  57.     bsr.w    dojmp
  58.  
  59. nojmp:
  60.  
  61. crunched:
  62.     move.w    a2,($dff180).l
  63.     cmp.l    a0,a1
  64.     bgt.S    noteocrunch
  65.     bsr.w    dojmp    
  66.     bsr.w    write1lwd    
  67.     move.l    d7,(a2)+    
  68.  
  69.     movem.l    (sp)+,a0-a1/a5
  70.  
  71. ;    lea    start,a0
  72. ;    lea    stop,a1
  73.  
  74.     move.l    a1,d2    
  75.     sub.l    a0,d2
  76.     move.l    d2,(a2)+        ;raw length
  77.     clr.l    d0
  78.     clr.l    d1
  79.     clr.l    d2
  80.     clr.l    d3
  81.     clr.l    d4
  82.     clr.l    d5
  83.     lea    cnt,a3
  84.     movem.w    (a3)+,d0-d5
  85.  
  86.     move.l    a2,a3
  87.     sub.l    a0,a3        ;
  88.  
  89.     sub.l    a5,a2
  90.     move.l    a2,d0        ;crunched data length
  91.     move.l    d0,8(a5)
  92.  
  93.     movem.l    (sp)+,d1-d7/a0-a6
  94.     rts
  95.  
  96. blkcrunch:
  97.     move.l    a0,a3
  98.     add.l    #offset,a3
  99.     cmp.l    a1,a3    
  100.     ble.S    nottop
  101.     move.l    a1,a3    
  102.  
  103. nottop:
  104.     moveq    #$1,d5    
  105.     move.l    a0,a5    
  106.     addq    #$1,a5
  107.  
  108. contcrunch:
  109.     move.b    (a0),d3    
  110.     move.b    $1(a0),d4
  111.  
  112. quickfind:
  113.     cmp.b    (a5)+,d3    
  114.     bne.S    contfind    
  115.     cmp.b    (a5),d4
  116.     beq.S    lenfind
  117.  
  118. contfind:
  119.     cmp.l    a5,a3
  120.     bgt.S    quickfind
  121.     bra.S    endquickfind
  122.  
  123. lenfind:
  124.     subq    #1,a5    
  125.     move.l    a0,a4    
  126.  
  127. scan:
  128.     move.b    (a4)+,d3    
  129.     cmp.b    (a5)+,d3
  130.     bne.S    endequ
  131.     cmp.l    a5,a3
  132.     bgt.S    scan
  133.  
  134. endequ:
  135.     move.l    a4,d3    
  136.     sub.l    a0,d3    
  137.     subq.l    #1,d3
  138.     cmp.l    d3,d5    
  139.     bge.S    nocrunch    
  140.     move.l    a5,d4    
  141.     sub.l    a0,d4    
  142.     sub.l    d3,d4
  143.     subq    #1,d4    
  144.     cmp.l    #$4,d3
  145.     ble.S    small
  146.     moveq    #$6,d6        
  147.     cmp.l    #$00000101,d3    
  148.     blt.S    oksafe
  149.     move.w    #$100,d3        
  150.  
  151. oksafe:
  152.     bra.S    cont1
  153.  
  154. small:
  155.     move.w    d3,d6    
  156.     subq.w    #$2,d6    
  157.     lsl.w    #1,d6
  158.  
  159. cont1:
  160.     lea    table,a6    
  161.     cmp.w    (a6,d6.w),d4    
  162.     bge.S    nocrunch        
  163.     move.l    d3,d5        
  164.     move.l    d4,maxsoffset
  165.     move.b    d6,tbloffset
  166.  
  167. nocrunch:
  168.     cmp.l    a5,a3    
  169.     bgt.S    contcrunch
  170.  
  171.  
  172. endquickfind:    
  173.     cmp.l    #$1,d5        
  174.     beq.S    nothingfound
  175.     bsr.S    dojmp    
  176.     move.b    tbloffset,d6
  177.     move.l    maxsoffset,d3
  178.     move.w    8(a6,d6.w),d0    
  179.     bsr.S    wd0bits        
  180.     move.w    16(a6,d6.w),d0    
  181.     beq.S    nolength        
  182.     move.l    d5,d3        
  183.     subq    #1,d3
  184.     bsr.S    wd0bits
  185.  
  186. nolength:
  187.     move.w    24(a6,d6.w),d0    
  188.     move.w    32(a6,d6.w),d3    
  189.     bsr.S    wd0bits        
  190.     addi.w    #$1,40(a6,d6.w)
  191.     addi.w    #$1,$dff188
  192.     add.l    d5,a0    
  193.     clr.b    d0    
  194.     rts
  195.  
  196. nothingfound:
  197.     move.b    (a0)+,d3
  198.     moveq    #$8,d0
  199.     bsr.S    wd0bits
  200.     moveq    #$1,d0
  201.     rts
  202. dojmp:
  203.     tst.w    d1
  204.     beq.S    skipjmp
  205.     move.w    d1,d3
  206.     clr.w    d1
  207.     cmp.w    #9,d3
  208.     bge.S    bigjmp
  209.     addq.w    #1,cntjmp
  210.     subq.w    #1,d3
  211.     moveq    #5,d0        
  212.     bra.S    wd0bits
  213.  
  214. skipjmp:
  215.     rts
  216.  
  217. bigjmp:
  218.     addq.w    #1,cntjmp+2
  219.     subi.w    #9,d3
  220.     or.w    #%0000011100000000,d3    
  221.     moveq    #11,d0            
  222.     bra.w    wd0bits
  223.  
  224. wd0bits:    
  225.     addi.w    #$1,$dff188
  226.     subq.w    #1,d0
  227.  
  228. copybits:
  229.     lsr.l    #1,d3    
  230.     roxl.l    #1,d2    
  231.     bcs.S    writelwd    
  232.     dbf    d0,copybits
  233.     rts
  234.  
  235. write1lwd:
  236.     clr.w    d0    
  237.  
  238. writelwd:
  239.     move.l    d2,(a2)+    
  240.     eor.l    d2,d7            
  241.     moveq    #1,d2            
  242.     dbf    d0,copybits            
  243.     rts
  244.  
  245.  
  246.     ;decrunch routine
  247.     ;
  248.     ;a0 = pointer to crunched data
  249.     ;a1 = pointer to uncrunched data
  250.  
  251.  
  252. Decrunch:
  253.     movem.l    d0-d7/a0-a6,-(sp)
  254.  
  255.     add.l    8(a0),a0    ;eind file
  256.  
  257. ;    lea    d_stop,a0    ; eind van data, kan relatief
  258. ;    lea    $60000,a1    ; destination
  259.  
  260.     move.l    -(a0),a2
  261.     add.l    a1,a2
  262.     move.l    -(a0),d5
  263.     move.l    -(a0),d0
  264.     eor.l    d0,d5
  265. Decrunch_a:    lsr.l    #1,d0
  266.     bne.s    Decrunch_b
  267.     bsr    Decrunch_m
  268. Decrunch_b:    bcs.s    Decrunch_i
  269.     moveq    #8,d1
  270.     moveq    #1,d3
  271.     lsr.l    #1,d0
  272.     bne.s    Decrunch_c
  273.     bsr    Decrunch_m
  274. Decrunch_c:    bcs.s    Decrunch_k
  275.     moveq    #3,d1
  276.     clr.w    d4
  277. Decrunch_d:    bsr    Decrunch_n
  278.     move.w    d2,d3
  279.     add.w    d4,d3
  280. Decrunch_e:    moveq    #7,d1
  281. Decrunch_f:    lsr.l    #1,d0
  282.     bne.s    Decrunch_g
  283.     bsr    Decrunch_m
  284. Decrunch_g:    roxl.l    #1,d2
  285.     dbra    d1,Decrunch_f
  286.  
  287.     move.b    d2,-(a2)
  288.     dbra    d3,Decrunch_e
  289.  
  290.     bra    Jump_a
  291.  
  292. Decrunch_h:    moveq    #8,d1
  293.     moveq    #8,d4
  294.     bra    Decrunch_d
  295.  
  296. Decrunch_i:    moveq    #2,d1
  297.     bsr    Decrunch_n
  298.     cmp.b    #2,d2
  299.     blt.s    Decrunch_j
  300.     cmp.b    #3,d2
  301.     beq.s    Decrunch_h
  302.     moveq    #8,d1
  303.     bsr    Decrunch_n
  304.     move.w    d2,d3
  305.     move.w    #12,d1
  306.     bra    Decrunch_k
  307.  
  308. Decrunch_j:    move.w    #9,d1
  309.     add.w    d2,d1
  310.     addq.w    #2,d2
  311.     move.w    d2,d3
  312. Decrunch_k:    bsr    Decrunch_n
  313. Decrunch_l:    subq.w    #1,a2
  314.     move.b    0(a2,d2.w),(a2)
  315.     dbra    d3,Decrunch_l
  316.  
  317. Jump_a:    cmp.l    a2,a1
  318.     blt    Decrunch_a
  319.  
  320. ;    tst.l    d5
  321. ;    bne.s    Error_a
  322.  
  323.     move.l    #0,d0        ;no errors!
  324.     movem.l    (sp)+,d0-d7/a0-a6
  325.     rts
  326.  
  327. ;    ;jmp    $30000        ; of iets anders
  328. ;    ;illegal    
  329. ;Error_a:    ;move.w    #$FFFF,d0
  330. ;Error_b:    ;move.w    d0,$DFF180
  331. ;    ;sub.l    #1,d0
  332. ;    ;bne.s    Error_b
  333. ;    move.l    #-1,d0        ;error!
  334. ;    rts
  335. ;    ;illegal        ; laat amiga vastlopen/return
  336.  
  337.  
  338. Decrunch_m:    move.l    -(a0),d0
  339.     eor.l    d0,d5
  340.     move    #$10,CCR
  341.     roxr.l    #1,d0
  342.     rts
  343.  
  344. Decrunch_n:    subq.w    #1,d1
  345.     clr.w    d2
  346. Decrunch_o:    lsr.l    #1,d0
  347.     bne.s    Decrunch_p
  348.     move.l    -(a0),d0
  349.     eor.l    d0,d5
  350.     move    #$10,CCR
  351.     roxr.l    #1,d0
  352. Decrunch_p:    roxl.l    #1,d2
  353.     dbra    d1,Decrunch_o
  354.     rts
  355.  
  356. table:
  357. offst:    dc.w    $0100,$0200,$0400,$1000
  358. blklnoff:    dc.w    $0008,$0009,$000a,$000c
  359. blklength:    dc.w    $0000,$0000,$0000,$0008
  360. blkcdlen:    dc.w    $0002,$0003,$0003,$0003
  361. blkcode:    dc.w    $0001,$0004,$0005,$0006
  362. cnt:    dc.w    $0,$0,$0,$0
  363. cntjmp:    dc.w    $0,$0
  364. maxsoffset:    dc.l    0
  365. tbloffset:    dc.l    0
  366.  
  367.     incdir    'w:'
  368.  
  369. ;raw    equ    $80000
  370. ;raw.e    equ    raw+366948
  371. raw
  372. ;    incbin    'routine/ColorGrid.rot'
  373. ;    incbin    'routine/CopperMagnify4.rot'
  374.     incbin    'routine/CopperMagnify8.rot'
  375. ;    incbin    'routine/CopperPalette_16.rot'
  376. ;    incbin    'routine/Landscape_L2.rot'
  377. ;    incbin    'routine/Landscape_L4.rot'
  378. ;    incbin    'routine/Landscape_L8.rot'
  379. ;    incbin    'routine/Landscape_L16.rot'
  380. ;    incbin    'routine/Landscape_L32.rot'
  381. ;    incbin    'routine/Object_H2.rot'
  382. ;    incbin    'routine/Object_H4.rot'
  383. ;    incbin    'routine/Object_H8.rot'
  384. ;    incbin    'routine/Object_L2.rot'
  385. ;    incbin    'routine/Object_L4.rot'
  386. ;    incbin    'routine/Object_L8.rot'
  387. ;    incbin    'routine/Object_L16.rot'
  388. ;    incbin    'routine/Object_L32.rot'
  389. ;    incbin    'routine/Object_L64.rot'
  390. ;    incbin    'routine/PictureMove.rot'
  391. ;    incbin    'routine/Plasma.rot'
  392. ;    incbin    'routine/ScrollBig_L8.rot'
  393. ;    incbin    'routine/ScrollBigNTSC_L8.rot'
  394. ;    incbin    'routine/ScrollNTSC_H4.rot'    ;raw !
  395. ;    incbin    'routine/ScrollNTSC_L2.rot'
  396. ;    incbin    'routine/ScrollNTSC_L16.rot'
  397. ;    incbin    'routine/ScrollNTSC_L32.rot'
  398. ;    incbin    'routine/Scroll_H2.rot'
  399. ;    incbin    'routine/Scroll_H4.rot'        ;raw !
  400. ;    incbin    'routine/Scroll_L2.rot'
  401. ;    incbin    'routine/Scroll_L4.rot'
  402. ;    incbin    'routine/Scroll_L8.rot'
  403. ;    incbin    'routine/Scroll_L16.rot'
  404. ;    incbin    'routine/Scroll_L32.rot'
  405. ;    incbin    'routine/Stars.rot'
  406. ;    incbin    'routine/Vector_L2.rot'
  407. ;    incbin    'routine/Vector_L4.rot'
  408. ;    incbin    'routine/Vector_L8.rot'
  409. ;    incbin    'routine/Vector_L16.rot'
  410. ;    incbin    'routine/Vector_L32.rot'
  411. ;    incbin    'routine/Vector_H2.rot'
  412. ;    incbin    'routine/Vector_H4.rot'
  413. ;    incbin    'routine/VectorShade_L2.rot'
  414. ;    incbin    'routine/Wave.rot'
  415. raw.e
  416.  
  417.  
  418.     cnop    0,2
  419. cru    ds.b    10000
  420.  
  421.     
  422.